<?php

/**
 * Description of VendaDAO
 *
 * @author Hiago
 */
class VendaDAO {

    public static function inserir(Venda $venda) {
        $con = new bd();
        try {
            $con->beginTransaction();
            $stmt = $con->prepare("INSERT INTO `venda` (`idVenda`, `id_cliente`, `id_status`, `id_pagamento`,
                                  `id_endereco`, `comentario`) VALUES (?,?,?,?,?,?)");
            $dados = Array($venda->getIdVenda(), $venda->getCliente()->getIdCliente(), $venda->getStatus()->getIdStatus(),
                $venda->getPagamento()->getIdPagamento(), $venda->getEndereco()->getIdEndereco(), $venda->getComentario());
            $stmt->execute($dados);
            $id = $con->lastInsertId();
            $con->ocorreramErros($stmt);
            $venda->setIdVenda($id);
            $con->commit();

            $itemVendaDAO = new ItemVendaDAO();
            if ($venda->getItensVenda() != null)
                foreach ($venda->getItensVenda() as $itemVenda) {
                    $itemVenda->setId_venda($id);
                    $itemVendaDAO->inserir($itemVenda);
                }
        } catch (Exception $ex) {
//            $con->rollBack();
        }

        //$con->commit();
    }

//    public function atualizar(Usuario $usuario) {
//        $con = new bd();
//        $stmt = $con->prepare("UPDATE `usuario` SET `login` = ?, `senha` = ?, `id_permissao = ?`)
//                              WHERE `usuario`.`idUsuario` = ?;");
//        $dados = Array($usuario->getSenha(), $usuario->getPermissao()->getIdPermissao, $usuario->getIdUsuario(), $usuario->getIdUsuario());
//        $stmt->execute($dados);
//        $con->ocorreramErros($stmt);
//    }

    public function getById($id) {
        $con = new bd();
        $stmt = $con->prepare("SELECT `cliente`.`idCliente`,`cliente`.`nome`,`cliente`.`sobrenome`,
                              `cliente`.`telefone`,`cliente`.`data_cadastro`,`cliente`.`id_usuario`
                              FROM `cliente` WHERE `cliente`.`idCliente` = ?;");
        $stmt->execute(Array($id));
        $con->ocorreramErros($stmt);

        $r = $stmt->fetch();
        $usuarioDAO = new UsuarioDAO();
        $usuario = $usuarioDAO->getById($r[5]);
        $cliente = new Cliente($usuario, $r[0], $r[1], $r[2], $r[3], $r[4]);
        $cliente->setEnderecos($this->getEnderecos($id));
        $cliente->setEnderecoPrincipal($this->getEnderecoPrincipal($id));

        return $cliente;
    }

    public static function listar() {
        $con = new bd();
        $stmt = $con->prepare("SELECT *,id_usuario FROM venda
            join cliente on idCliente = id_cliente");
        $stmt->execute();
        $con->ocorreramErros($stmt);

        $vendas = Array();
        while ($r = $stmt->fetch()) {

            $cliente = ClienteDAO::getById($r["id_usuario"]);
            $status = StatusDAO::getById($r["id_status"]);
            $pagamento = PagamentoDAO::getById($r["id_pagamento"]);
            $endereco = EnderecoDAO::getById($r['id_endereco']);

            $stmt2 = $con->prepare("SELECT * FROM item_venda where id_venda = ?");
            $stmt2->execute(array($r['idVenda']));

            $itens = array();
            while ($i = $stmt2->fetch()) {
                $produto = ProdutoDAO::getById($i['id_produto']);
                $itens[] = new ItemVenda($r['idVenda'], $produto, $i['quantidade']);
            }
            $venda = new Venda($r['idVenda'], $cliente, $status, $pagamento, $endereco, "", $itens);
            $vendas[] = $venda;
        }
        return $vendas;
    }

    public function excluir(Cliente $cliente) {
        $usuarioDAO = new UsuarioDAO();
        $usuarioDAO->excluir($cliente);
    }

    private static function getEnderecos($idCliente) {
        $enderecoDAO = new EnderecoDAO();
        $con = new bd();
        $stmt = $con->prepare("SELECT `cliente_endereco`.`id_endereco`
                               FROM `cliente_endereco` where `cliente_endereco`.`id_cliente` = ?;");
        $stmt->execute(Array($idCliente));
        $con->ocorreramErros($stmt);

        $enderecos = Array();
        while ($r = $stmt->fetch()) {
            $enderecos[] = $enderecoDAO->getById($r[0]);
        }
        return $enderecos;
    }

    private static function getEnderecoPrincipal($idCliente) {
        $enderecoDAO = new EnderecoDAO();
        $con = new bd();
        $stmt = $con->prepare("SELECT `cliente_endereco`.`id_endereco` FROM `cliente_endereco`
                              where `cliente_endereco`.`id_cliente` = ? AND `isPrincipal` = true;");
        $stmt->execute(Array($idCliente));
        $con->ocorreramErros($stmt);

        $r = $stmt->fetch();
        return $enderecoDAO->getById($r[0]);
    }

}

?>
